package com.nidu.demo.web.system;

import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.nidu.demo.i18n.api.SysI18nService;
import com.nidu.demo.i18n.dto.LanguageCO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

/**
 * 国际化资源控制器
 * 符合RESTful API设计规范
 * 
 * @author nidu
 */
@Slf4j
@Tag(name = "国际化资源管理", description = "提供语言设置和国际化消息资源")
@RestController
@RequestMapping("/system/i18n")
@RequiredArgsConstructor
public class SysI18nController {

    private final SysI18nService service;

    /**
     * 设置用户语言偏好
     * @param land
     * @return
     */
    @PutMapping("/language")
    @Operation(summary = "设置用户语言偏好", description = "更新当前用户的语言偏好设置")
    public Response setUserLocale(@PathVariable @Parameter(description = "消息代码") String land) {
       return service.switchLanguage(land);
    }

    /**
     * 获取支持的语言列表
     * @return
     */
    @GetMapping("/languages")
    @Operation(summary = "获取支持的语言列表", description = "返回系统支持的所有语言")
    public MultiResponse<LanguageCO> getLanguages() {
        return service.getSupportLanguages();
    }

    /**
     * 获取指定语言信息
     * @return
     */
    @GetMapping("/language")
    @Operation(summary = "获取当前语言信息")
    public SingleResponse<LanguageCO> getCurrentLanguage() {
        return service.getCurrentLanguage();
    }

    /**
     * 获取国际化消息
     * @param messageCode
     * @return
     */
    @GetMapping("/messages/{messageCode}")
    @Operation(summary = "获取国际化消息", description = "根据消息代码获取当前语言的消息内容")
    public SingleResponse<String> getMessage(
            @PathVariable @Parameter(description = "消息代码") String messageCode) {
        return service.getI18nMessage(messageCode);
    }

}
